﻿//3011. 判断一个数组是否可以变为有序
//给你一个下标从 0 开始且全是 正 整数的数组 nums 。
//一次 操作 中，如果两个 相邻 元素在二进制下设置位的数目 相同 
//那么你可以将这两个元素交换。你可以执行这个操作 任意次 （也可以 0 次）。
//如果你可以使数组变为非降序，请你返回 true ，否则返回 false 。


class Solution {
public:
    bool canSortArray(vector<int>& nums)
    {
        int n = nums.size();
        for (int i = 0; i < n;)
        {
            int j = i;
            int one = __builtin_popcount(nums[i]);
            while (j < n && __builtin_popcount(nums[j]) == one)
            {
                j++;
            }
            sort(nums.begin() + i, nums.begin() + j);
            i = j;
        }
        return ranges::is_sorted(nums);
    }
};